package bookshop.service.impl;

import bookshop.domain.Book;
import bookshop.domain.CartItem;
import bookshop.domain.ShoppingCart;
import bookshop.service.ShoppingCartService;

public class ShoppingCartServiceImpl implements ShoppingCartService {

	public void addBookToCart(Book book, ShoppingCart cart) {

		boolean isExitedInCart = false;

		for (CartItem item : cart.getItems()) {
			if (item.getBook().getBookCode().equals(book.getBookCode())) {
				item.setAmount(item.getAmount() + 1);
				item.setTotalPrice(item.getAmount() * book.getBookPrice());
				isExitedInCart = true;
				break;
			}
		}

		if (isExitedInCart == false) {
			CartItem item = new CartItem();
			item.setBook(book);
			item.setAmount(1);
			item.setTotalPrice(book.getBookPrice());
			cart.getItems().add(item);
		}

		cart.setCartAmount(cart.getCartAmount() + book.getBookPrice());

	}

	public void delBookInCart(String bookCode, ShoppingCart cart) {
		for (CartItem item : cart.getItems()) {
			if (item.getBook().getBookCode().equals(bookCode)) {
				cart.setCartAmount(cart.getCartAmount() - item.getTotalPrice());
				cart.getItems().remove(item);
				break;
			}
		}
	}

	public CartItem getItemByBookCode(String bookCode, ShoppingCart cart) {
		CartItem cartItem = new CartItem();
		for (CartItem item : cart.getItems()) {
			if (item.getBook().getBookCode().equals(bookCode)) {
				cartItem = item;
				break;
			}
		}

		return cartItem;

	}

	public void updateBookInCart(String bookCode, CartItem cartItem,
			ShoppingCart cart) {
		for (CartItem item : cart.getItems()) {
			if (item.getBook().getBookCode().equals(bookCode)) {
				cart.setCartAmount(cart.getCartAmount()-item.getTotalPrice());
				item.setTotalPrice(item.getAmount()*item.getBook().getBookPrice());
				cart.setCartAmount(cart.getCartAmount()+item.getTotalPrice());
				break;
			}
		}

	}

}
